home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / win_os2.swg / 0032_Bitmap Startup.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  5KB  |  134 lines

  1. {
  2. I 've seen a lot of question here arround, how to
  3. display a bitmap befor starting a program in Windows.
  4. Well, this program shows a bitmap without opening a window.
  5. I 'll send you this program for borland pascal.
  6. (Those who use TPW will have to change the USES declaration)
  7.  
  8. **************************************************************
  9. * Bitmap befor starting the program without opening a window *
  10. **************************************************************
  11. }
  12.  
  13. PROGRAM Sample;
  14.  
  15. USES Wintypes, Winprocs, WinCrt, Objects, OWindows, ODialogs;
  16.  
  17. {$R BITMAP.RES }
  18.  
  19. TYPE
  20.  
  21.   PClipWin = ^TClipWin;
  22.   TClipWin = OBJECT (TWindow)
  23.     Constructor Init (AParent : PWindowsObject; ATitle : PChar;
  24.                       AMenu : HMenu);
  25.     Procedure GetWindowClass (VAR AWndClass : TWndClass); VIRTUAL;
  26.     Function  GetClassName : PChar; VIRTUAL;
  27.     Procedure SetupWindow; VIRTUAL;
  28.   END;
  29.  
  30.   TClipApp = OBJECT (TApplication)
  31.     Procedure InitMainWindow; VIRTUAL;
  32.   END;
  33.  
  34. { *** TClipWin *** }
  35.  
  36. Constructor TClipWin.Init (AParent : PWindowsObject; ATitle : PChar;
  37.                            AMenu : HMenu);
  38. { ** The main window in this example is a fixed window
  39.      which cannot be resized or moved                   ** }
  40. BEGIN
  41.   Inherited Init (AParent, ATitle);
  42. { ** The sample main window will be open over the whole screen ** }
  43.   Attr.X := -1;
  44.   Attr.Y := -1;
  45.   Attr.W := GetSystemMetrics (sm_CxScreen) + 3;
  46.   Attr.H := GetSystemMetrics (sm_CyScreen) + 3;
  47.   Attr.Style := WS_SYSMENU OR WS_MINIMIZEBOX OR WS_MAXIMIZE;
  48. { ** The menu must be defined in the resource ** }
  49.   Attr.Menu := AMenu;
  50. END;
  51.  
  52. Procedure TClipWin.GetWindowClass (VAR AWndClass : TWndClass);
  53. BEGIN
  54.   Inherited GetWindowClass (AWndClass);
  55. { ** Also the icon of the program must be defined in the resource ** }
  56.   AWndClass.HIcon := LoadIcon (HInstance, 'MAINICON');
  57. { ** This gray background is a standard which is not heavy colored ** }
  58.   AWndClass.HBrBackGround := CreateSolidBrush (RGB (128, 128, 128));
  59. END;
  60.  
  61. Function TClipWin.GetClassName : PChar;
  62. BEGIN
  63.   GetClassName := 'Bitmap Sample';
  64. END;
  65.  
  66. Procedure TClipWin.SetupWindow;
  67. BEGIN
  68.   Inherited SetupWindow;
  69. { ** DeleteMenu kills the menu point 'MOVE / RESIZE'. The windows can
  70.      now not be resized or moved. It is fixed                        ** }
  71.   DeleteMenu (GetSystemMenu(HWindow, FALSE), 1, MF_BYPOSITION);
  72. END;
  73.  
  74. { *** TClipApp *** }
  75.  
  76. Procedure TClipApp.InitMainWindow;
  77. BEGIN
  78.   CmdShow := SW_SHOWMAXIMIZED;
  79.   MainWindow := New(PClipWin, Init(NIL, 'Bitmap Sample Window',
  80.                     LoadMenu (HInstance, 'MAINMENU')));
  81. END;
  82.  
  83. VAR
  84.   ClipApp : TClipApp;
  85.   DC, MemDC : hDC;
  86.   Bitmap, OldBitmap : HBitmap;
  87.   BM : TBitmap;
  88.   Rect : TRect;
  89.   H, W : Integer;
  90.   Ticks : LongInt;
  91. BEGIN
  92. { ** !! DISPLAY THe BITMAP BEFOR APPLICATION.INIT !! ** }
  93.  
  94. { ** Create the display context ** }
  95.   DC := CreateDC('DISPLAY',nil,nil,nil);
  96. { ** Load the bitmap stored in the resource ** }
  97.   Bitmap := LoadBitmap(HInstance, MakeIntResource('STARTBITMAP'));
  98. { ** Memory context compatibel to the display context ** }
  99.   MemDC := CreateCompatibleDC(DC);
  100. { ** Save the actual context ** }
  101.   OldBitmap := SelectObject(MemDC, Bitmap);
  102. { ** Get the bitmap ** }
  103.   GetObject (Bitmap, SizeOf(BM),@BM);
  104. { ** Get height and width of the screen ** }
  105.   H := GetSystemMetrics (sm_CyScreen);
  106.   W := GetSystemMetrics (sm_CxScreen);
  107. { ** Copy the resource bitmap into the memory context and move it
  108.      exactly in the middle of the screen !!                    ** }
  109.   BitBlt (DC,W DIV 2-(BM.bmWidth DIV 2), H DIV 2-(BM.bmHeight DIV 2),
  110.           BM.bmWidth, BM.bmHeight, MemDC, 0, 0, SRCCopy);
  111. { ** Holds the system for 5 seconds, to study the bitmap.
  112.      5000 = milliseconds ** }
  113.   Ticks := GetTickCount;
  114.   Repeat
  115.   Until ABS (Ticks - GetTickCount) > 5000;
  116. { ** Remove all bitmaps and contexts ** }
  117.   DeleteObject (SelectObject (MemDC, OldBitmap));
  118.   DeleteDC (MemDC);
  119.   DeleteDC (DC);
  120. { ** Now start the main window ** }
  121.   ClipApp.Init('Bitmap Sample Window');
  122.   ClipApp.Run;
  123.   ClipApp.Done;
  124. END.
  125.  
  126. ----------------------- CUT IT -- CUT IT -----------------------------
  127.  
  128. This example will show the resource bitmap befor the main window,
  129. without opening an other window. I made this program as easy as
  130. possible. The palette is not included, but a 256 colored palette will
  131. be added (selectpalette - realizepalette) without difficulties.
  132. Ofcourse a normal bitmap (HDD) could also be used instead of the
  133. resource bitmap
  134.